"use strict";
/*
    TS 对象定义 保留JS的对象定义语法
        对象：具有一个事务的属性和方法描述的数据集合
*/
// 1、字面量 = 快速构建对象
var user = {
    name: 'tom',
    age: 23
};
// 2、构造函数定义方式 （非严格语法模式）
//     = 提供模板式对象定义
// function User(name,age){
//     this.name = name;
//     this.age = age;
// }
// User.prototype.show = function(){};
// var user1 = new User("jack",23);
// var user2 = new User("sophia",22);
// user1.show();
// user2.show();
// 3、闭包语法对象构造器 （非严格语法模式）
//    = 提供模板式对象定义，以构造器作为整体进行功能性的统一描述
//    = JS 面向对象开发的基础 == 对象构造函数 == 类
//    = 对象构造器被称之为类，是因为构造器本身就是对当前语法环境的对象类型扩展
// var UserA = (function(){
//     var UserTemp = function(name,age){
//         this.name = name;
//         this.age = age;
//     }
//     UserTemp.prototype.show = function(){
//         console.log("原型方法 show");
//     }
//     return UserTemp;
// })();
// var user3 = new UserA("JSON",234);
// TS严格语法环境中，对于对象定义只保留JS的字面对象定义
// 构造函数的定义方式，TS进行了重写，以新的语法简化了构造函数时对象定义方式
/*
    class 构造函数名{
        属性名:类型 = 初始值;
        方法名(形参:类型):返回值类型{};
    }
    通过上述语法定义的 TS 类，实际上就是JS环境中的闭包构造函数
    在class中定义 属性 就是构造函数为实例赋值的属性
    在class中定义 方法 就是当前构造函数的原型方法

    class会完成TS语法环境中Objectd 的类型扩展
*/
var UserC = /** @class */ (function () {
    function UserC() {
        this.name = "";
        this.age = 0;
        this.sex = "";
    }
    UserC.prototype.say = function () {
        console.log(this.name, this.age);
    };
    return UserC;
}());
var user4 = new UserC();
user4.name;
user4.sex;
var user5 = new UserC();
user5.name;
user5.age;
user5.say();
// 面向对象：将程序运行过程中具有相同特性的一组数据，抽象为一个class类
//          通过该类创建具有相同特性的一组对象数据
